/**
 * @file 文件大小格式化工具函数
 * @description 提供文件大小相关格式化工具函数
 * @date 2024-06-15
 */

/**
 * 格式化文件大小，自动选择合适的单位
 * @param bytes 文件大小（字节）
 * @param decimals 小数位数
 * @returns 格式化后的文件大小
 */
export function formatFileSize(bytes: number, decimals: number = 2): string {
  if (bytes === 0) return '0 Bytes';
  if (!bytes || isNaN(bytes) || bytes < 0) return '--';
  
  const k = 1024;
  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
  const i = Math.floor(Math.log(bytes) / Math.log(k));
  
  return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + ' ' + sizes[i];
}

/**
 * 以指定的单位格式化文件大小
 * @param bytes 文件大小（字节）
 * @param unit 单位，可选值为"B"、"KB"、"MB"、"GB"、"TB"
 * @param decimals 小数位数
 * @returns 格式化后的文件大小
 */
export function formatFileSizeWithUnit(
  bytes: number,
  unit: 'B' | 'KB' | 'MB' | 'GB' | 'TB' = 'B',
  decimals: number = 2
): string {
  if (bytes === 0) return `0 ${unit}`;
  if (!bytes || isNaN(bytes) || bytes < 0) return '--';
  
  const k = 1024;
  const unitIndex = ['B', 'KB', 'MB', 'GB', 'TB'].indexOf(unit);
  
  if (unitIndex === -1) return '--';
  
  return (bytes / Math.pow(k, unitIndex)).toFixed(decimals) + ' ' + unit;
}

/**
 * 格式化百分比
 * @param value 百分比值（0-1）
 * @param decimal 小数位数，默认为0
 * @returns 格式化后的百分比字符串
 */
export function formatPercent(value: number, decimal: number = 0): string {
  if (typeof value !== 'number' || isNaN(value)) return '0%';
  
  const percent = value * 100;
  return `${percent.toFixed(decimal)}%`;
} 